-- @owner: xue-xinyi610
-- @date: 2025/2/20
-- @testpoint: I8XDZ2 新增功能，禁用单个触发器。执行成功。。

-- 步骤pre 1：删除表（如果存在）
DROP TABLE IF EXISTS test_table;

-- 步骤pre 2：创建测试表
CREATE TABLE test_table (id1 INT, id2 INT, id3 INT);

-- 步骤pre 3：删除函数（如果存在）
DROP FUNCTION IF EXISTS test_function;

-- 步骤pre 4：创建触发器函数
CREATE FUNCTION test_function() RETURNS TRIGGER AS
$$
BEGIN
    -- 当 id1 = 1 时，更新 id2 为 5
    UPDATE test_table SET id2 = 5 WHERE id1 = 1;
    RETURN NEW;
END
$$ LANGUAGE PLPGSQL;/

-- 步骤pre 5：删除触发器（如果存在）
DROP TRIGGER IF EXISTS test_trigger ON test_table;

-- 步骤pre 6：创建触发器
CREATE TRIGGER test_trigger
BEFORE INSERT ON test_table
EXECUTE PROCEDURE test_function();/

-- 步骤pre 7：禁用触发器
ALTER TRIGGER test_trigger DISABLE;

-- 步骤test 1：启用触发器
ALTER TRIGGER test_trigger ENABLE;

-- 步骤test 2：插入数据，触发器应该生效
INSERT INTO test_table (id1, id2, id3) VALUES (1, 0, 0);
INSERT INTO test_table (id1, id2, id3) VALUES (1, 0, 0);

-- 步骤post 1：查询数据，确保触发器生效
SELECT * FROM test_table;

-- 步骤pre 7：禁用触发器
ALTER TRIGGER test_trigger DISABLE;
-- 步骤test 2：插入数据，触发器不应该生效
INSERT INTO test_table (id1, id2, id3) VALUES (1, 0, 0);
SELECT * FROM test_table;

-- 步骤post 2：删除触发器
DROP TRIGGER test_trigger ON test_table;

-- 步骤post 3：删除触发器函数
DROP FUNCTION test_function;

-- 步骤post 4：删除表
DROP TABLE test_table;
